
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;

/**
 * La classe Menu si occupa di impostare il menù a tendina all'intero del frame,
 * creando le varie voci che permettono di gestire nuove partite, caricamento di
 * una partita precedentemente salvata, salvare una partita e uscire dal gioco.
 * @author Maciej Grinka
 */
public class Menu {
    /**
     * Oggetto di tipo JMenuBar che identifica la barra del menù
     */
        private JMenuBar menuBar;
        /**
         * Oggetto di tipo JMenu che identifica la voce Menu dalla barra del menu
         * a tendina
         */
        private JMenu menu;
 /**
  * Oggetto di tipo JMenuItem che identifica la voce Nuova Parita dal menù
  */
    private JMenuItem NG;
     /**
  * Oggetto di tipo JMenuItem che identifica la voce Carica Parita dal menù
  */
    private JMenuItem LG;
     /**
  * Oggetto di tipo JMenuItem che identifica la voce Salva Parita dal menù
  */
    private JMenuItem SG;
     /**
  * Oggetto di tipo JMenuItem che identifica la voce Esci dal menù
  */
    private JMenuItem EG;
   
    
   /**
    * Ritorna un oggetto di tipo JMenuBar che identifica la barra del Menù
    * @return un oggetto JMenuBar contenente la barra del menu
    */
    public JMenuBar getMenuBar(){
        return menuBar;
    }
    /**
     * Inizializza la barra del menù aggiungendo tutte le voci relative alla gestione
     * della partita
     */
    public void InitializeMenu(){
         menuBar = new JMenuBar();
        
        menu = new JMenu("Menu");
        menu.setMnemonic(KeyEvent.VK_M);
        
        menuBar.add(menu);
         
       
      // richiama il metodo per aggiungere la voce nuova partita
        newGame();
        // richiama il metodo per aggiungere la voce carica partita
        loadGame();
        // richiama il metodo per aggiungere la voce salva partita
        saveGame();
        // richiama il metodo per aggiungere la voce esci
        exitGame();

    }
 /**
  * Inizializza un oggetto di tipo JMenuItem contenente la voce nuova partita
  * e le sue proprietà
  */
    private void newGame(){
         NG = new JMenuItem("nuova partita",
                                 KeyEvent.VK_N);
        //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        NG.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_N, ActionEvent.ALT_MASK));
        menu.add(NG);
    }
     /**
  * Inizializza un oggetto di tipo JMenuItem contenente la voce carica partita
  * e le sue proprietà
  */
    private void loadGame(){
         LG = new JMenuItem("carica partita",
                                 KeyEvent.VK_C);
        //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        LG.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_C, ActionEvent.ALT_MASK));
        menu.add(LG);
    }
     /**
  * Inizializza un oggetto di tipo JMenuItem contenente la voce salva partita
  * e le sue proprietà
  */
    private void saveGame(){
         SG = new JMenuItem("salva partita",
                                 KeyEvent.VK_S);
        //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        SG.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_S, ActionEvent.ALT_MASK));
        menu.add(SG);
    }
     /**
  * Inizializza un oggetto di tipo JMenuItem contenente la voce esci
  * e le sue proprietà
  */
    public void exitGame(){
         EG = new JMenuItem("esci",
                                 KeyEvent.VK_E);
        EG.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_E, ActionEvent.ALT_MASK));
        menu.add(EG);
        
          EG.addActionListener(new ActionListener() {
/**
 * Azione della voce esci.
 * Cliccando sulla voce esci dal menù viene caricato un oggetto di tipo JOptionPane
 * che permette di scegliere se uscire dal gioco o continuare la partita.
 */
            public void actionPerformed(ActionEvent e) {
               int n = JOptionPane.showConfirmDialog(null,"Vuoi uscire dal gioco in corso?","Esci dal gioco",JOptionPane.YES_NO_OPTION);         
               System.out.println(n);
               if(n==0)
                   System.exit(0);
    }});
    }
    /**
     * Ritorna un oggetto di tipo JMenuItem contenete la voce Salva Partita e tutte
     * le sue proprietà
     * @return un oggetto JMenuItem contenente le proprietà della voce Salva Partita
     */
    public JMenuItem getSaveGame(){
        return SG;
    }
    /**
     * Ritorna un oggetto di tipo JMenuItem contenete la voce Nuova Partita e tutte
     * le sue proprietà
     * @return un oggetto JMenuItem contenente le proprietà della voce Nuova Partita
     */
     public JMenuItem getNewGame(){
        return NG;
    }
     /**
     * Ritorna un oggetto di tipo JMenuItem contenete la voce Carica Partita e tutte
     * le sue proprietà
     * @return un oggetto JMenuItem contenente le proprietà della voce Carica Partita
     */
      public JMenuItem getLoadGame(){
        return LG;
    }
    
}
